로또의 최고 순위와 최저 순위
📒 문제 설명
💻 언어
C++
풀이
- 입력 배열과 당첨 배열을
parameter로 받는다. - 크기
2의 최저 순위와 최고 순위값을 넣을 result vector를 선언한다.굳이 vector가 아니어도 일반 변수를 선언해도 상관 없다.
- for 중첩문을 활용한다.
관련 알고리즘
-
사고 과정
📌 최고 순위 파악
- 첫 번째 for문에서는 최고 순위일 때를 Count한다.
(it != win_nums.end() || lottos[j] == 0의 조건은 다음과 같다.- 알아볼 수 없는 숫자가 나올 때 (0의 입력값일 때)
iterator를 통해 값을 찾을 수 없지 않을 때 (== 값이 있을 때) 만약, 값이 없다면 당첨된 번호가 아닌 것이다.
- 이 과정을 통해 최고 순위를 Count한다.
📌 최저 순위 파악
- 두 번째 for문에서는 최저 순위일 때를 Count한다.
it != win_nums.end()의 조건은 다음과 같다.iterator를 통해 값을 찾을 수 없지 않을 때 (== 값이 있을 때) 만약, 값이 없다면 당첨된 번호가 아닌 것이다.
- 이 과정을 통해 최저 순위를 Count한다.
📌 Count한 숫자로 순위 매기기
- 각각 순위 파악이 끝나면 Count한 값을 통해 순위를 매긴다.
result[i] = (result[i] - 7) * -1;의 조건은 다음과 같다.- Count한 값이 많을수록 순위는 높아진다. 다르게 말하면, 순위값은 낮아진다.
(1등 = 1의 값) - Count한 값을 역순으로 돌리면 쉽게 순위값을 얻을 수 있다.
- Count한 값을 역순으로 만들되 1 ~ 6의 범위가 나올 수 있도록 한다.
- Count한 값 -7 (
0 ~ 6범위에서-7 ~ -1로 변경) - 해당 값에 -1을 곱한다 (
1 ~ 7의 범위로 변경) - 이 때 -7은 순위에 포함되지 않으므로 Count 값이 0일 때를 따로 부여한다. (
Count 값이 0일 경우 순위는 6위)
- Count한 값이 많을수록 순위는 높아진다. 다르게 말하면, 순위값은 낮아진다.
결과
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums)
{
vector<int> result(2);
vector<int>::iterator it;
for (size_t i = 0; i < 2; i++)
{
for (size_t j = 0; j < 6; j++)
{
it = find(win_nums.begin(), win_nums.end(), lottos[j]);
if (i == 0)
{ // 최고일 때
if (it != win_nums.end() || lottos[j] == 0)
result[i]++;
}
else
{ // 최저일 때
if (it != win_nums.end())
result[i]++;
}
}
if (result[i] != 0)
result[i] = (result[i] - 7) * -1;
else
result[i] = 6;
}
return result;
}